package org.japo.java.basics.main;

/*******************************************************************************
 * @author José A. Pacheco Ondoño
 * @version 1.0
 *
 * Sintaxis;
 *       java ClaseCharacter | more
 *
 * Este programa sirve para ilustrar la utilización de los métodos de la clase 
 * Character.
 ******************************************************************************/
public class ClaseCharacter {

    /***************************************************************************
     * Método de entrada al programa
     **************************************************************************/
    public static void main(String[] arg) {
        // Constantes
        final char CARACTER = 'a';
        final char ROMANO   = '\u216C';
        final char DIGITO   = 'f';
        final int  BASE     = 16;
        final int  NUMERO   = 11;
        
        // Variables
        Character objCharacter;

        // Constantes predefinidas
        System.out.println();
        System.out.println("Constantes predefinidas de la clase Character ...");
        System.out.println("Valor mínimo Unicode MIN_CODE_POINT --> " + 
                Character.MIN_CODE_POINT);
        System.out.println("Valor máximo Unicode MAX_CODE_POINT --> " + 
                Character.MAX_CODE_POINT);
        System.out.println("Número de bits de la representación --> " + 
                Character.SIZE);        
        
        // Constructor a partir de un carácter
        System.out.println();
        System.out.println("A partir del carácter: \'" + CARACTER + "\' ...");
        objCharacter = new Character(CARACTER);
        System.out.println("... se obtiene el objeto Character " + 
                objCharacter);

        // Conversión de digito numérico a número en la base indicada
        System.out.println();
        System.out.println("El dígito numérico ...........: " + 
                "\'" + DIGITO + "\'");
        System.out.println("Equivale al número ...........: " + 
                Character.digit(DIGITO, BASE));
        System.out.println("En la base numérica ..........: " + BASE);
        System.out.println("Nota: Este método es estático, por ello ...");
        System.out.println("... NO SE INSTANCIA la clase Character.");
        
        // Conversión de número a digito numérico a la base indicada
        System.out.println();
        System.out.println("El número ....................: " + NUMERO);
        System.out.println("Equivale al dígito numérico ..: " + 
                Character.forDigit(NUMERO, BASE));
        System.out.println("En la base numérica ..........: " + BASE);
        System.out.println("Nota: Este método es estático, por ello ...");
        System.out.println("... NO SE INSTANCIA la clase Character.");
        
        // Obtención del valor numérico representado por un carácter
        System.out.println();
        System.out.println("El carácter \'" + ROMANO + "\' ...");
        System.out.println("... tiene el valor numérico " + 
                Character.getNumericValue(ROMANO));
        System.out.println("Nota: Este método es estático, por ello ...");
        System.out.println("... NO SE INSTANCIA la clase Character.");
                
        // Conversión del objeto Character a char
        System.out.println();
        objCharacter = new Character(CARACTER);
        System.out.println("A partir del objeto Character " + 
                objCharacter + " ...");
        System.out.println("... se obtiene el carácter " +
                "\'" + objCharacter.charValue() + "\'");

        // Analiza si el carácter es un dígito numérico
        System.out.println();
        System.out.println("El carácter \'" + CARACTER + "\' ...");
        if (Character.isDigit(CARACTER)) {
            System.out.println("... SI es un dígito númérico");
        } else {
            System.out.println("... NO es un dígito númérico");
        }
        System.out.println("Nota: Este método es estático, por ello ...");
        System.out.println("... NO SE INSTANCIA la clase Character.");

        // Analiza si el carácter es una letra
        System.out.println();
        System.out.println("El carácter \'" + CARACTER + "\' ...");
        if (Character.isLetter(CARACTER)) {
            System.out.println("... SI es una letra");
        } else {
            System.out.println("... NO es una letra");
        }
        System.out.println("Nota: Este método es estático, por ello ...");
        System.out.println("... NO SE INSTANCIA la clase Character.");

        // Analiza si el carácter es letra o dígito numérico
        System.out.println();
        System.out.println("El carácter \'" + CARACTER + "\' ...");
        if (Character.isLetterOrDigit(CARACTER)) {
            System.out.println("... SI es una letra o un número");
        } else {
            System.out.println("... NO es una letra o un número");
        }
        System.out.println("Nota: Este método es estático, por ello ...");
        System.out.println("... NO SE INSTANCIA la clase Character.");

        // Analiza si el carácter es una letra minúscula
        System.out.println();
        System.out.println("El carácter \'" + CARACTER + "\' ...");
        if (Character.isLowerCase(CARACTER)) {
            System.out.println("... SI es una letra minúscula");
        } else {
            System.out.println("... NO es una letra minúscula");
        }
        System.out.println("Nota: Este método es estático, por ello ...");
        System.out.println("... NO SE INSTANCIA la clase Character.");

        // Analiza si el carácter es una letra mayúscula
        System.out.println();
        System.out.println("El carácter \'" + CARACTER + "\' ...");
        if (Character.isUpperCase(CARACTER)) {
            System.out.println("... SI es una letra mayúscula");
        } else {
            System.out.println("... NO es una letra mayúscula");
        }
        System.out.println("Nota: Este método es estático, por ello ...");
        System.out.println("... NO SE INSTANCIA la clase Character.");

        // Determina si el carácter es un espacio en blanco para Java
        System.out.println();
        System.out.println("El carácter \'" + CARACTER + "\' ...");
        if (Character.isWhitespace(CARACTER)) {
            System.out.println("... SI es un espacio en blanco para Java");
        } else {
            System.out.println("... NO es un espacio en blanco para Java");
        }
        System.out.println("Nota: Este método es estático, por ello ...");
        System.out.println("... NO SE INSTANCIA la clase Character.");

        // Determina si el carácter es un espacio en blanco de Unicode
        System.out.println();
        System.out.println("El carácter \'" + CARACTER + "\' ...");
        if (Character.isSpaceChar(CARACTER)) {
            System.out.println("... SI es un espacio en blanco de Unicode");
        } else {
            System.out.println("... NO es un espacio en blanco de Unicode");
        }
        System.out.println("Nota: Este método es estático, por ello ...");
        System.out.println("... NO SE INSTANCIA la clase Character.");

        // Convierte el valor del objeto Character en una cadena de caracteres
        System.out.println();
        objCharacter = new Character(CARACTER);
        System.out.println("El objeto Character " + objCharacter + " ...");
        System.out.println("... se convierte en la cadena de caracteres " +
                "\"" + objCharacter.toString() + "\"");

        // Convierte el carácter a minúsculas
        System.out.println();
        System.out.println("El carácter \'" + CARACTER + "\' ...");
        System.out.println("... convertido a minúsculas es " + 
                "\'" + Character.toLowerCase(CARACTER) + "\'");
        System.out.println("Nota: Este método es estático, por ello ...");
        System.out.println("... NO SE INSTANCIA la clase Character.");

        // Convierte el carácter a mayúsculas
        System.out.println();
        System.out.println("El carácter \'" + CARACTER + "\' ...");
        System.out.println("... convertido a mayúsculas es " + 
                "\'" + Character.toUpperCase(CARACTER) + "\'");
        System.out.println("Nota: Este método es estático, por ello ...");
        System.out.println("... NO SE INSTANCIA la clase Character.");
    }
}